home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -serious- / misc / cmq060 / source / cmq060.include.s next >
Text File  |  1999-07-26  |  5KB  |  197 lines

  1. *******************************************
  2. *            CopyMemQuicker060            *
  3. * Uses Move16 only in Adresses >$00ffffff *
  4. *                                         *
  5. *            Include File V1.4            *
  6. *          written by Dirk Busse          *
  7. *               3. Apr. 1999              *
  8. *******************************************
  9.  
  10. PatchStart
  11.  
  12.         tst.l   d0
  13.         beq.b   squit
  14.         move.w  a1,d1   ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
  15.         btst    #0,d1
  16.         beq.b   .skip1
  17.         move.b  (a0)+,(a1)+    ;Zieladresse auf EVEN setzen
  18.         subq.l  #1,d0
  19.         beq.b   squit
  20.         move.w  a1,d1
  21. .skip1  btst    #1,d1
  22.         beq.b   .skip2
  23.         cmpi.l  #1,d0
  24.         bne.b   .two
  25.         move.b  (a0)+,(a1)+
  26.         rts
  27.  
  28. ;  cnop 0,4
  29.  
  30. .two    move.w  (a0)+,(a1)+    ;Zieladresse auf LONG setzen
  31.         subq.l  #2,d0
  32.         beq.b   squit
  33. .skip2
  34.         cmpi.l  #%0000100000010000,d0 ;prüfen, ob d0 >=2064
  35.         bcc.b   bigmove
  36.  
  37. smlmove move.l  d0,d1
  38.         lsr.w   #2,d1          ;d0 ist hier nur noch maximal 12Bit lang
  39.         beq.b   .nolong
  40. .loop   move.l  (a0)+,(a1)+
  41.         subq.w  #1,d1
  42.         bne.b   .loop
  43.  
  44. .nolong btst    #1,d0
  45.         beq.b   .skip
  46.         move.w  (a0)+,(a1)+    ;letztes Word uebertragen
  47. .skip   btst    #0,d0
  48.         beq.b   squit
  49.         move.b  (a0)+,(a1)+    ;letztes Byte uebertragen
  50. squit   rts
  51.  
  52. ;  cnop 0,4
  53.  
  54. bigmove cmpa.l  #$01000000,a0 ;Ist Quelladresse >$00ffffff ?
  55.         bcs.b   bigmov
  56.         cmpa.l  #$01000000,a1 ;Ist Zieladresse >$00ffffff ?
  57.         bcs.b   bigmov
  58.         move.w  a1,d1
  59.         btst    #2,d1
  60.         beq.b   .skip1
  61.         subq.l  #%100,d0       ;Zieladresse auf 8-Byte-Block legen
  62.         move.l  (a0)+,(a1)+
  63.         move.w  a1,d1
  64. .skip1  btst    #3,d1
  65.         beq.b   .dest16
  66.         subq.l  #%1000,d0       ;Zieladresse auf 16-Byte-Block legen
  67.         move.l  (a0)+,(a1)+
  68.         move.l  (a0)+,(a1)+
  69. .dest16 move.w  a0,d1
  70.         andi.b  #15,d1
  71.         bne.b   bigmov     ;wenn Quelladresse nicht im 16-Byte-Block liegt
  72.  
  73.         move.l  d0,d1
  74.         lsr.l   #7,d1
  75. .loop   move16  (a0)+,(a1)+
  76.         move16  (a0)+,(a1)+
  77.         move16  (a0)+,(a1)+
  78.         move16  (a0)+,(a1)+
  79.         move16  (a0)+,(a1)+
  80.         move16  (a0)+,(a1)+
  81.         move16  (a0)+,(a1)+
  82.         move16  (a0)+,(a1)+
  83.         subq.l  #1,d1
  84.         bne.b   .loop
  85.         and.w   #%0000000001111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  86.         bne.b   smlmove
  87.         rts
  88.  
  89. ;  cnop 0,4
  90.  
  91. bigmov  move.l  d0,d1
  92.         lsr.l   #6,d1
  93. .loop   move.l  (a0)+,(a1)+
  94.         move.l  (a0)+,(a1)+
  95.         move.l  (a0)+,(a1)+
  96.         move.l  (a0)+,(a1)+
  97.         move.l  (a0)+,(a1)+
  98.         move.l  (a0)+,(a1)+
  99.         move.l  (a0)+,(a1)+
  100.         move.l  (a0)+,(a1)+
  101.         move.l  (a0)+,(a1)+
  102.         move.l  (a0)+,(a1)+
  103.         move.l  (a0)+,(a1)+
  104.         move.l  (a0)+,(a1)+
  105.         move.l  (a0)+,(a1)+
  106.         move.l  (a0)+,(a1)+
  107.         move.l  (a0)+,(a1)+
  108.         move.l  (a0)+,(a1)+
  109.         subq.l  #1,d1
  110.         bne.b   .loop
  111.         and.w   #%0000000000111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  112.         bne.b   smlmove
  113.         rts
  114.  
  115.   cnop 0,4
  116. **************************************************************************
  117.  
  118. Quickest
  119.         lsr.l   #2,d0
  120.         cmpi.l  #%0000001000000100,d0 ;prüfen, ob d0 >=2064/4
  121.         bcc.b   bigmo16
  122.  
  123. smlmovQ tst.w   d0          ;d0 ist hier nur noch maximal 10 Bit lang
  124.         beq.b   squitQ
  125. sloopQ  move.l  (a0)+,(a1)+
  126.         subq.w  #1,d0
  127.         bne.b   sloopQ
  128. squitQ  rts
  129.  
  130. ;  cnop 0,4
  131.  
  132. bigmo16 cmpa.l  #$01000000,a0 ;Ist Quelladresse >$00ffffff ?
  133.         bcs.b   bigmovQ
  134.         cmpa.l  #$01000000,a1 ;Ist Zieladresse >$00ffffff ?
  135.         bcs.b   bigmovQ
  136.         move.w  a1,d1
  137.         btst    #2,d1
  138.         beq.b   .skip1
  139.         subq.l  #1,d0       ;Zieladresse auf 8-Byte-Block legen
  140.         move.l  (a0)+,(a1)+
  141.         move.w  a1,d1
  142. .skip1  btst    #3,d1
  143.         beq.b   .dest16
  144.         subq.l  #2,d0       ;Zieladresse auf 16-Byte-Block legen
  145.         move.l  (a0)+,(a1)+
  146.         move.l  (a0)+,(a1)+
  147. .dest16 move.w  a0,d1
  148.         andi.b  #15,d1
  149.         bne.b   bigmovQ     ;wenn Quelladresse nicht im 16-Byte-Block liegt
  150.  
  151.         move.l  d0,d1
  152.         lsr.l   #5,d1
  153. .loop   move16  (a0)+,(a1)+
  154.         move16  (a0)+,(a1)+
  155.         move16  (a0)+,(a1)+
  156.         move16  (a0)+,(a1)+
  157.         move16  (a0)+,(a1)+
  158.         move16  (a0)+,(a1)+
  159.         move16  (a0)+,(a1)+
  160.         move16  (a0)+,(a1)+
  161.         subq.l  #1,d1
  162.         bne.b   .loop
  163.         and.w   #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  164.         bne.b   sloopQ
  165.         rts
  166.  
  167. ;  cnop 0,4
  168.  
  169. bigmovQ move.l  d0,d1
  170.         lsr.l   #4,d1
  171. .loop   move.l  (a0)+,(a1)+
  172.         move.l  (a0)+,(a1)+
  173.         move.l  (a0)+,(a1)+
  174.         move.l  (a0)+,(a1)+
  175.         move.l  (a0)+,(a1)+
  176.         move.l  (a0)+,(a1)+
  177.         move.l  (a0)+,(a1)+
  178.         move.l  (a0)+,(a1)+
  179.         move.l  (a0)+,(a1)+
  180.         move.l  (a0)+,(a1)+
  181.         move.l  (a0)+,(a1)+
  182.         move.l  (a0)+,(a1)+
  183.         move.l  (a0)+,(a1)+
  184.         move.l  (a0)+,(a1)+
  185.         move.l  (a0)+,(a1)+
  186.         move.l  (a0)+,(a1)+
  187.         subq.l  #1,d1
  188.         bne.b   .loop
  189.         and.w   #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  190.         bne.b   sloopQ
  191.         rts
  192.  
  193.   cnop 0,4
  194.  
  195. PatchEnd
  196.  
  197.